/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.dao;

import br.com.folha.entity.CalculoFolha;
import br.com.folha.entity.GradeHorariaFp;
import br.com.folha.entity.Unidade;
import br.com.folha.utilidades.HibernateUtil;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author marceloml
 */
public class CalculoFolhaDao implements Serializable {
    
    private static final long serialVersionUID = 1L;
    private Long resultado;
    
    public List<CalculoFolha> consultaGrade(Unidade unidade, Date dataIni, Date dataFim){
       
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(GradeHorariaFp.class); 
        criteria.add(Restrictions.ge("data", dataIni)).add(Restrictions.le("data", dataFim)).add(Restrictions.eq("unidade", unidade));                
        criteria.addOrder(Order.asc("data"));
        criteria.addOrder(Order.asc("horaIni"));
        
    
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        
        return criteria.list();

        
    }
    
    public List<Object> listaGradePf(Unidade unidade, Integer tipoContratacao, Boolean consideraFds, Date dataInicial, Date dataFinal){
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(GradeHorariaFp.class);        
        criteria.createAlias("unidade", "u");
        criteria.createAlias("professor", "p");
        criteria.createAlias("turma", "t");  
                
        criteria.add(Restrictions.between("data", dataInicial, dataFinal));       
        criteria.add(Restrictions.eq("unidade", unidade));    
        
        System.out.println("Data Inicial :"+dataInicial);
        System.out.println("Data Final :"+dataFinal);        
        System.out.println("Unidade :"+unidade.getNome());        
        
        if(tipoContratacao != 0 && tipoContratacao != 99){
            criteria.add(Restrictions.eq("tipoContrato", tipoContratacao));
        }
        
        if(tipoContratacao == 99){
            criteria.add(Restrictions.eq("tipoContrato", 0));
        }
        
        criteria.addOrder(Order.asc("p.nome"));
        criteria.addOrder(Order.asc("data"));
        criteria.addOrder(Order.asc("t.nome"));
        criteria.addOrder(Order.asc("horaIni"));        
        
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);        

        List lista = criteria.list();        
        sessao.close();
        return lista;                        
    }     
    
    public List<Object> listaGradeProfessor(Unidade unidade, Integer tipoContratacao, Integer professor, Boolean consideraFds, Date dataInicial, Date dataFinal){
            Session sessao = HibernateUtil.getSessionFactory();
            Criteria criteria = sessao.createCriteria(GradeHorariaFp.class);        
            criteria.createAlias("unidade", "u");
            criteria.createAlias("professor", "p");
            criteria.createAlias("turma", "t",Criteria.LEFT_JOIN);  

            criteria.add(Restrictions.between("data", dataInicial, dataFinal));       
            criteria.add(Restrictions.eq("unidade", unidade));        
            criteria.add(Restrictions.eq("p.id", professor));        

            if(tipoContratacao != 0 && tipoContratacao != 99){
                criteria.add(Restrictions.eq("tipoContrato", tipoContratacao));
            }

            if(tipoContratacao == 99){
                criteria.add(Restrictions.eq("tipoContrato", 0));
            }

            criteria.addOrder(Order.asc("p.nome"));
            criteria.addOrder(Order.asc("data"));
            criteria.addOrder(Order.asc("t.nome"));
            criteria.addOrder(Order.asc("horaIni"));        

            criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);        

            List lista = criteria.list();        
            sessao.close();
            return lista;                        
        } 

    public GradeHorariaFp getById(int id)
    { 
       Session sessao = HibernateUtil.getSessionFactory();
       Query query = sessao.createQuery("FROM GradeHorariaFp WHERE id = :id");               
       query.setParameter("id", id);        

       return (GradeHorariaFp) query.uniqueResult();
    }        
    
    public GradeHorariaFp getByIdGrade(int id)
    { 
       Session sessao = HibernateUtil.getSessionFactory();
       Query query = sessao.createQuery("FROM GradeHorariaFp WHERE id_grade = :id");               
       query.setParameter("id", id);        

       return (GradeHorariaFp) query.uniqueResult();
    }     
    
}
